package com.xwd.service;

import com.xwd.pojo.Book;
import com.xwd.pojo.PageBean;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * @ClassName BookService
 * @Description: com.xwd.service
 * @Auther: xiwd
 * @Date: 2022/2/13 - 02 - 13 - 14:58
 * @version: 1.0
 */
public interface BookService {
    //properties

    //setter

    //getter

    //constructors

    //methods
    /**
     * 查询总的数据条数
     * @return int-总的数据条数
     */
    public abstract Long findTotalSize();

    /**
     * 分页查询——根据指定的查询页+查询页的信息条数查询目标数据
     * @param currentPage 当前页
     * @param pageSize 当前页的信息条数
     * @return Student信息的查询列表
     */
    public abstract PageBean<Book> queryForPage(int currentPage, int pageSize);


    /*******************************select查询*****************************/

    /**
     * 查询满足条件的单个Book对象
     * @param name 占位符参数-name
     * @return 查询到的单个Book对象
     */
    public abstract Book queryObjectByName(String name);

    /**
     * 查询List集合列表
     */
    public abstract List<Book> queryForList(String name);

    /**
     * 查询Map键值对对象
     * @param name 占位符参数
     * @return name-value格式的Map对象
     */
    public abstract Map<String, Object> queryForMap(String name);

    /**
     * 将单个查询结果封装为map对象，并将其全部封装到List集合中
     * @param price 占位符参数-表示书的价格
     * @return List<Map>集合对象
     */
    public abstract List<Map<String,Object>> queryForMapList(BigDecimal price);

    /**
     * 将查询结果的第一条记录的所有属性转为Object[]数组形式返回（列值一一对应）
     * @param price 占位符参数值-表示价格
     * @return 代表查询结果的-Book对象属性的Object[]数组
     */
    public abstract Object[] queryForAttributeArray(BigDecimal price);


    /**
     * 将查询结果的所有记录的所有属性转为Object[]数组形式返回（列值一一对应）
     * @param price 占位符参数
     * @return 代表查询结果的-Book对象属性的Object[]数组
     */
    public abstract List<Object[]> queryForAttributeArrayList(BigDecimal price);

    /**
     * ColumnListHandler：将结果集中指定的列的字段值，封装到一个List集合中
     * @param colname 要封装为List集合的列名称
     * @param price 占位符参数
     * @return 代表查询结果的-Book对象属性的List集合
     */
    public abstract Object queryForAttributeList(String colname,BigDecimal price);

    /**
     * 利用ScalarHandler查询单数据——select count(*) from 表
     * @param price 占位符参数
     * @return 查询到的结果
     */
    public abstract Object queryForCount(BigDecimal price);

    /*******************************insert增加*****************************/
    /**
     * 新增一本书
     * @param book Book对象
     * @return 影响的行数
     */
    public abstract int insertBook(Book book);

    /*******************************modify增加*****************************/
    /**
     * 新增一本书
     * @param book Book对象
     * @return 影响的行数
     */
    public abstract int modifyBook(Book book);


    /*******************************delete删除*****************************/
    /**
     * 新增一本书
     * @param book Book对象
     * @return 影响的行数
     */
    public abstract int deleteBook(Book book);
}
